--ABCDEFGHIJKLMNOPQRSTUVXZ
--      |         |
CREATE DATABASE VENDAS
ON ( NAME = 'VENDAS_PRIM',
     FILENAME = 'C:\DADOS\VENDAS_PRIM.MDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),
FILEGROUP ATE_G  
   ( NAME = 'VENDAS_ATE_G',
     FILENAME = 'C:\DADOS\VENDAS_ATE_G.NDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),
FILEGROUP ATE_Q  
   ( NAME = 'VENDAS_ATE_Q',
     FILENAME = 'C:\DADOS\VENDAS_ATE_Q.NDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),
FILEGROUP ATE_Z  
   ( NAME = 'VENDAS_ATE_Z',
     FILENAME = 'C:\DADOS\VENDAS_ATE_Z.NDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )
LOG ON
   ( NAME = 'VENDAS__LOG',
     FILENAME = 'C:\DADOS\VENDAS__LOG.LDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )
GO

USE VENDAS

CREATE PARTITION FUNCTION NomesPFN( VARCHAR(50) )
AS
RANGE LEFT FOR VALUES ( 'GZZZZ', 'QZZZZ' )
GO

CREATE PARTITION SCHEME NomesSchema
AS PARTITION NomesPFN TO ( ATE_G, ATE_Q, ATE_Z )
GO

CREATE TABLE CLIENTES
(  COD_CLIENTE			INT		IDENTITY,
   NOME					VARCHAR(50),
   ESTADO				CHAR(2),
   CIDADE				VARCHAR(40),
   CEP					CHAR(8),
   CONSTRAINT PK_CLIENTES PRIMARY KEY (COD_CLIENTE, NOME) )
ON NomesSchema( NOME )

SELECT * FROM SYS.PARTITIONS
WHERE OBJECT_ID = OBJECT_ID('CLIENTES')

INSERT INTO CLIENTES
( NOME, ESTADO, CIDADE, CEP	)
SELECT NOME, ESTADO, CIDADE, CEP
FROM PEDIDOS.DBO.CLIENTES

SELECT * FROM SYS.PARTITIONS
WHERE OBJECT_ID = OBJECT_ID('CLIENTES')

UPDATE CLIENTES SET NOME = LTRIM(NOME)

SELECT $PARTITION.NomesPFN( NOME ) AS NUM_PARTICAO, NOME
FROM CLIENTES
ORDER BY NUM_PARTICAO, NOME

SELECT $PARTITION.NomesPFN( NOME ) AS NUM_PARTICAO, 
       MIN(NOME) AS MENOR_NOME, MAX(NOME) AS MAIOR_NOME
FROM CLIENTES
GROUP BY $PARTITION.NomesPFN( NOME )

---------------------------------------------------------------------------
--DROP DATABASE REDE_LOJAS
CREATE DATABASE REDE_LOJAS
ON ( NAME = 'REDE_LOJAS_PRIM',
     FILENAME = 'C:\DADOS\REDE_LOJAS_PRIM.MDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),
FILEGROUP FILIAL_1  
   ( NAME = 'REDE_LOJAS_FILIAL_1',
     FILENAME = 'C:\DADOS\REDE_LOJAS_FILIAL_1.NDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),
FILEGROUP FILIAL_2
   ( NAME = 'REDE_LOJAS_FILIAL_2',
     FILENAME = 'C:\DADOS\REDE_LOJAS_FILIAL_2.NDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),
FILEGROUP FILIAL_3
   ( NAME = 'REDE_LOJAS_FILIAL_3',
     FILENAME = 'C:\DADOS\REDE_LOJAS_FILIAL_3.NDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),
FILEGROUP OUTRAS
   ( NAME = 'REDE_LOJAS_OUTRAS',
     FILENAME = 'C:\DADOS\REDE_LOJAS_OUTRAS.NDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )
LOG ON
   ( NAME = 'REDE_LOJAS__LOG',
     FILENAME = 'C:\DADOS\REDE_LOJAS__LOG.LDF',
     SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )
GO

USE REDE_LOJAS

CREATE PARTITION FUNCTION FiliaisPFN( INT )
AS RANGE LEFT FOR VALUES ( 1,2,3 )
GO

CREATE PARTITION SCHEME FiliaisScheme
AS PARTITION FiliaisPFN TO ( FILIAL_1, FILIAL_2, FILIAL_3, OUTRAS )
GO

CREATE TABLE [dbo].[CLIENTES](
	[CODCLI] [int] IDENTITY(1,1) NOT NULL,
	[NOME] [varchar](50) ,
	[FANTASIA] [varchar](20) ,
	[ENDERECO] [varchar](60) ,
	[BAIRRO] [varchar](20) ,
	[CIDADE] [varchar](20) ,
	[ESTADO] [varchar](2) ,
	[CEP] [varchar](8) ,
	[CNPJ] [varchar](18) ,
	[INSCRICAO] [varchar](19) ,
	[FONE1] [varchar](15) ,
	[FAX] [varchar](15) ,
	[E_MAIL] [varchar](35) ,
	[DATA_CAD] [datetime] ,
	[ICMS] [numeric](4, 2) ,
	[REVENDA_CONSUMIDOR] [char](1) ,
	[DATA_ALTERACAO] [datetime]   DEFAULT (getdate()),
    [NUM_FILIAL] [INT] NOT NULL,
 CONSTRAINT [PK__CLIENTES] PRIMARY KEY CLUSTERED 
(
	[CODCLI] ASC, [NUM_FILIAL] ASC
)
) ON FiliaisScheme(NUM_FILIAL)

INSERT INTO CLIENTES
(NOME,FANTASIA,ENDERECO,BAIRRO,CIDADE,ESTADO,CEP,
 CNPJ,INSCRICAO,FONE1,FAX,E_MAIL,DATA_CAD,ICMS,
 REVENDA_CONSUMIDOR,DATA_ALTERACAO,NUM_FILIAL)
SELECT
 NOME,FANTASIA,ENDERECO,BAIRRO,CIDADE,ESTADO,CEP,
 CNPJ,INSCRICAO,FONE1,FAX,E_MAIL,DATA_CAD,ICMS,
 REVENDA_CONSUMIDOR,DATA_ALTERACAO,CASE
                                      WHEN ESTADO <= 'MG' THEN 1
                                      WHEN ESTADO <= 'PR' THEN 2
                                      WHEN ESTADO <= 'TO' THEN 3
                                      ELSE 4
                                   END
FROM PEDIDOS.DBO.CLIENTES

SELECT * FROM SYS.PARTITIONS
WHERE OBJECT_ID = OBJECT_ID('CLIENTES')

SELECT $PARTITION.FiliaisPFN( NUM_FILIAL ) AS NUM_PARTICAO, 
       NUM_FILIAL, COUNT(*) AS QTD_CLIENTES
FROM CLIENTES
GROUP BY $PARTITION.FiliaisPFN( NUM_FILIAL ), NUM_FILIAL

SELECT * , $PARTITION.FiliaisPFN( NUM_FILIAL ) AS NUM_PARTICAO
FROM CLIENTES
WHERE $PARTITION.FiliaisPFN( NUM_FILIAL ) = 4

use pedidos

update clientes set NOME = LTRIM(nome)